package br.com.afi.pattern.interpreter.expression;


/**
 * Implementação abstrata da interface {@link ProgressiveResultExpression}, essa classe implementa 
 * o método {@link #setResult(Object)}
 * 
 * @author André de Fontana Ignacio
 * @version 1.0
 */
public abstract class AbstractProgressiveResultExpression implements ProgressiveResultExpression
{
	private Object result;
	
	@Override
	public void setResult(Object result) {
		this.result = result;
	}
	
	/**
	 * Obtém o resultado realizando o cast para o tipo informado
	 * 
	 * @param <T> Tipo 
	 * @param clazz Classe
	 * @return Resultado 
	 */
	@SuppressWarnings("unchecked")
	protected <T> T getResult(Class<T> clazz)
	{
		return (T) result;
	}
	
	/**
	 * Obtém o resultado
	 * 
	 * @return Resultado
	 */
	protected Object getResult()
	{
		return result;
	}
}
